/*
 * listeClients.c
 *
 *  Created on: 3 mai 2010
 *      Author: reda
 */


#include "listeClients.h"


void init_liste_clients(ListeClients *liste){
	
	liste->debut=NULL;
	liste->fin=NULL;
	liste->taille=0;
}

void copier_clients(variable *donnees1, variable *donnees2){
	donnees1->port = donnees2->port;
	strcpy(donnees1->ip, donnees2->ip);
	donnees1->socket = donnees2->socket;
	donnees1->last_event = donnees2->last_event;
}



int est_egale_clients(variable donnees1, variable donnees2){
	
	if ((donnees1.port==donnees2.port)&&(!strcmp(donnees1.ip,donnees2.ip))) {
		return 1;
	} else {
		return 0;
	}
}


void inserer_clients(ListeClients *liste, variable *donnees){
	
	EltListeClients *nv;
	nv=malloc(sizeof(EltListeClients));
	copier_clients(&(nv->donnees),donnees);
	if(liste->taille==0){
		nv->precedent=liste->debut;
		nv->suivant=liste->fin;
		liste->debut=nv;
		liste->fin=nv;
		liste->taille++;}
	else{
		nv->precedent=NULL;
		nv->suivant=liste->debut;
		
		liste->debut->precedent=nv;
		liste->debut=nv;
		liste->taille++;
		
	}
}


void supprimer_clients(ListeClients *liste, variable donnees){
	
	EltListeClients *elt;
	elt=malloc(sizeof(EltListeClients));
	elt=liste->debut;
	while(elt!=NULL){
		
		if(est_egale_clients(elt->donnees,donnees)){
			
			if(elt==liste->debut){
				
				liste->debut=elt->suivant;
				liste->taille--;
				if(liste->taille >1){
					elt->suivant->precedent=NULL;
					elt->suivant=NULL;
				}
			}
			
			else if(elt==liste->fin){
				
				liste->fin->precedent->suivant=NULL;
				liste->fin=liste->fin->precedent;
				liste->taille--;
				
				
			}
			else{
				
				elt->suivant->precedent=elt->precedent;
				elt->precedent->suivant=elt->suivant;
				liste->taille--;
				
			}
			
			break;
			
		}
		
		
		else
			elt=elt->suivant;
		
		
		
	}
	
}

void supprimer_liste_clients(ListeClients *l){
	
	if (l->taille!=0){
		EltListeClients *elt;
		elt=malloc(sizeof(EltListeClients));
		
		elt=l->debut;
		
		while(elt!=NULL){
			
			supprimer_clients(l,elt->donnees);
			elt=l->debut;
		}
		
	}
	
}



void afficher_liste_clients(ListeClients * l){
	if (l->taille!=0){
		EltListeClients *elt;
		elt=malloc(sizeof(EltListeClients));
		elt=l->debut;
		while(elt!=l->fin){
			afficher_variable_clients(&(elt->donnees));
			elt=elt->suivant;
		}
		afficher_variable_clients(&(elt->donnees));
	}
	else printf("liste vide");
}
void afficher_variable_clients(variable * donnees){
	printf("ip = %s : port = %d\n",donnees->ip,donnees->port);	
}

variable * findBySocket(int socket,ListeClients * l){
	if (l->taille!=0){
		EltListeClients *elt;
		elt=malloc(sizeof(EltListeClients));
		elt=l->fin;
		while(elt!=NULL){
			if((elt->donnees).socket == socket){
				return &(elt->donnees);
			}
			elt=elt->precedent;
		}

	}
	return NULL;
}

/*
return_t recherche(variable * donnees1, ListeClients * liste_donnees, int sock) {
	
	//EltListeClients * parcours;
//	int i = 0;
//	
//	do {
//		parcours= liste_donnees->suivant;
//		i++;
//	}  while ((parcours->variable.socket != sock) && ( i < liste_donnees->taille))
//		
//		if (i < taille) {
//			donnees1 = parcours->variable;
//			return RT_OK;
//		}
	return RT_ERR;
	
}
*/


